/*
Eteria IRC Client, an RFC 1459 compliant client program written in Java.
Copyright (C) 2000  Javier Kohen <jkohen at tough.com>

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

import java.awt.*;
import java.awt.event.*;
import java.util.Vector;

import ar.com.jkohen.awt.ImageButton;
import ar.com.jkohen.awt.NickInfo;
import ar.com.jkohen.awt.ImageCanvas;
import ar.com.jkohen.util.Resources;

public class ASLBox extends Dialog implements ActionListener, KeyListener
{
    private EIRC eirc;
	private Frame f;
    private Resources res;

    private TextField nick, pass, age, location;
	private Checkbox checkM, checkF, checkU;

    public ASLBox(EIRC eirc, Frame f, String title)
    {
		super(f, false);
    	this.eirc = eirc;
		this.f = f;

		setFont(eirc.getFont());

    	GridBagLayout gb = new GridBagLayout();
    	GridBagConstraints gbc = new GridBagConstraints();

    	setLayout(gb);

    	gbc.insets = new Insets(2, 2, 2, 2);

    	ImageButton b;
    	Label l;

    	l = new Label(res.getString("eirc.enter_nick") + " :");
		gbc.anchor = GridBagConstraints.EAST;
		gbc.fill = GridBagConstraints.NONE;
		gbc.weightx = 0;
		gbc.gridwidth = 1;
		gb.setConstraints(l, gbc);
    	add(l);

    	nick = new TextField(16);
		gbc.fill = GridBagConstraints.HORIZONTAL;
		gbc.weightx = 1;
		gbc.gridwidth = GridBagConstraints.REMAINDER;
		gb.setConstraints(nick, gbc);
    	add(nick);

		l = new Label(res.getString("passw") + " :");
		gbc.fill = GridBagConstraints.NONE;
		gbc.gridwidth = 1;
		gbc.weightx = 0;
		gb.setConstraints(l, gbc);
		add(l);

    	pass = new TextField(16);
		pass.setEchoChar('*');
		gbc.fill = GridBagConstraints.HORIZONTAL;
		gbc.weightx = 1;
		gbc.gridwidth = GridBagConstraints.REMAINDER;
		gb.setConstraints(pass, gbc);
    	add(pass);

		l = new Label(res.getString("asl.age") + " :");
		gbc.fill = GridBagConstraints.NONE;
		gbc.gridwidth = 1;
		gbc.weightx = 0;
		gb.setConstraints(l, gbc);
		add(l);

    	age = new TextField(16);
		gbc.fill = GridBagConstraints.HORIZONTAL;
		gbc.gridwidth = GridBagConstraints.REMAINDER;
		gbc.weightx = 1;
		gb.setConstraints(age, gbc);
    	add(age);

		l = new Label(res.getString("asl.sex") + " :");
		gbc.fill = GridBagConstraints.NONE;
		gbc.gridwidth = 1;
		gbc.gridheight = 2;
		gbc.weightx = 0;
		gb.setConstraints(l, gbc);
		add(l);

    	CheckboxGroup sex = new CheckboxGroup();
		checkM = new Checkbox(res.getString("asl.male"), sex, false);
        checkF = new Checkbox(res.getString("asl.female"), sex, false);
        checkU = new Checkbox(res.getString("asl.unknown"), sex, false);
		ImageCanvas iconM = new ImageCanvas(res.getImage("asl.male"));
        ImageCanvas iconF = new ImageCanvas(res.getImage("asl.female"));
        ImageCanvas iconU = new ImageCanvas(res.getImage("asl.unknown"));
		gbc.gridheight = 1;
		gbc.fill = GridBagConstraints.NONE;
		gbc.weightx = 1;
		gbc.anchor = GridBagConstraints.CENTER;
		gbc.gridwidth = 1;
		gb.setConstraints(iconM, gbc);
    	add(iconM);
		gbc.weightx = 1;
		gbc.anchor = GridBagConstraints.CENTER;
		gbc.gridwidth = 1;
		gb.setConstraints(iconF, gbc);
    	add(iconF);
		gbc.weightx = 1;
		gbc.anchor = GridBagConstraints.CENTER;
		gbc.gridwidth = GridBagConstraints.REMAINDER;
		gb.setConstraints(iconU, gbc);
		add(iconU);
		gbc.weightx = 1;
		gbc.anchor = GridBagConstraints.CENTER;
		gbc.gridwidth = 1;
		gb.setConstraints(checkM, gbc);
    	add(checkM);
		gbc.weightx = 1;
		gbc.anchor = GridBagConstraints.CENTER;
		gbc.gridwidth = 1;
		gb.setConstraints(checkF, gbc);
    	add(checkF);
		gbc.weightx = 1;
		gbc.anchor = GridBagConstraints.CENTER;
		gbc.gridwidth = GridBagConstraints.REMAINDER;
		gb.setConstraints(checkU, gbc);
    	add(checkU);

		l = new Label(res.getString("asl.location") + " :");
		gbc.fill = GridBagConstraints.NONE;
		gbc.gridwidth = 1;
		gbc.weightx = 0;
		gb.setConstraints(l, gbc);
		add(l);

    	location = new TextField(16);
		gbc.fill = GridBagConstraints.HORIZONTAL;
		gbc.gridwidth = GridBagConstraints.REMAINDER;
		gbc.weightx = 1;
		gb.setConstraints(location, gbc);
    	add(location);
		
    	b = new ImageButton(res.getString("ok"));
	    b.setActionCommand("ok");
	    b.addActionListener(this);
		gbc.fill = GridBagConstraints.NONE;
		gbc.anchor = GridBagConstraints.CENTER;
		gbc.gridwidth = GridBagConstraints.REMAINDER;
	    gb.setConstraints(b, gbc);
		add(b);

		addKeyListener(this);
		nick.requestFocus();

		updateBackground((Container)this, getBackground());
		
		pack();
    	setTitle(title);
		setResizable(false);
    	setVisible(true);
    }

	public void init(String n, String p, String r)
	{
		nick.setText(n);
		pass.setText(p);

		Vector v = NickInfo.getASL(r);
		if (v == null)
			return;
		int a = ((Integer)v.firstElement()).intValue();
		int s = ((Integer)v.elementAt(1)).intValue();
		String l = (String)v.lastElement();

		age.setText(String.valueOf(a));
		if (s == NickInfo.SEX_MALE)
			checkM.setState(true);
		if (s == NickInfo.SEX_FEMALE)
			checkF.setState(true);
		if (s == NickInfo.SEX_UNKNOWN)
			checkU.setState(true);
		location.setText(l);
	}

    public void actionPerformed(ActionEvent ev)
    {
		String action = ev.getActionCommand();

		if (action.equals("ok") || ev.getSource() == pass)
		{
			String n = nick.getText();
			String p = pass.getText();
			String a = age.getText();
			int s = 0;
			if (checkM.getState())
				s = NickInfo.SEX_MALE;
			if (checkF.getState())
				s = NickInfo.SEX_FEMALE;
			String l = location.getText();
			if (!eirc.isNickCorrect(n))
				return;
			eirc.connect(n, p, NickInfo.fromASL(a, s, l));
			processWindowEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
		}
		if (action.equals("cancel"))
		{
	    	processWindowEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
		}
    }

	public void keyTyped(KeyEvent ke)
	{
	}

	public void keyReleased(KeyEvent ke)
	{
	}

	public void keyPressed(KeyEvent ke)
	{
		if (ke.getKeyCode() == KeyEvent.VK_ESCAPE)
	    	processWindowEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
	}

    public String getString()
    {
    	return(nick.getText());
    }

	public void updateBackground(Container ct, Color cl)
    {
		ct.setBackground(cl);
		Component cp[] = ct.getComponents();
		for (int i = 0; i < cp.length; i++)
		{
			if (cp[i] instanceof Container)
				updateBackground((Container)cp[i], cl);
			else
				if (!(cp[i] instanceof TextField))
					cp[i].setBackground(cl);
		}
    }
	
    public void setTextBackground(Color c)
    {
		nick.setBackground(c);
		pass.setBackground(c);
		age.setBackground(c);
		location.setBackground(c);
    }

    public void setTextForeground(Color c)
    {
		nick.setForeground(c);
		pass.setForeground(c);
		age.setForeground(c);
		location.setForeground(c);
    }

	public void show()
	{
		pack();
    	setLocation((f.getSize().width - getSize().width) / 2 + f.getLocation().x, (f.getSize().height - getSize().height) / 2 + f.getLocation().y);

		setBackground(eirc.getBackground());
		setForeground(eirc.getForeground());
		setTextBackground(eirc.getTextBackground());
		setTextForeground(eirc.getTextForeground());
		super.show();
	}
}